redis的5种数据类型

string,list,set,hash,sorted set

数据类型 存储的值 读写能力
string 可以是字符串、整数或浮点数。统称为元素 对字符串操作,对整数类型加减
list 一个序列集合,且每个节点都包好了一个元素 序列两端推入或弹出元素。修剪、查找或移除元素。
set 不重复的元素 从集合中插入或删除元素
hash 有key-value的散列组,其中key是唯一的字符串,value是元素 按照key进行增加删除。
sort set 带分数的score-value有序集合,其中score为浮点,value为元素 集合插入,按照分数范围查找。

string

结构:

​ key+vlaue

​ key:字符串

​ value:(string/int/float)

此处应该有图

简单使用:

  1. 在redis-cli中输入

    1
    2
    3
    4
    5
    6
    127.0.0.1:6379> set string1 content
    OK
    127.0.0.1:6379> set string2 3
    OK
    127.0.0.1:6379> set string3 3.5
    OK
  2. 对整数进行自增自减

    1
    2
    3
    4
    5
    6
    7
    8
    127.0.0.1:6379> incr string1
    (error) ERR value is not an integer or out of range
    127.0.0.1:6379> incr string2
    (integer) 4
    127.0.0.1:6379> decr string2
    (integer) 3
    127.0.0.1:6379> incr string3
    (error) ERR value is not an integer or out of range
  3. 对整数进行加减法

    1
    2
    3
    4
    127.0.0.1:6379> decrby string2 4
    (integer) -1
    127.0.0.1:6379> incrby string2 9
    (integer) 8
  4. 获取内容

    1
    2
    3
    4
    5
    6
    7
    8
    127.0.0.1:6379> get string1
    "content"
    127.0.0.1:6379> get string2
    "8"
    127.0.0.1:6379> get string3
    "3.5"
    127.0.0.1:6379> get string4
    (nil)

list

结构:

​ key:

​ value(12)

​ value(13)

​ value(14)

​ value(13)

此处应该有图

1
2
3
4
5
6
127.0.0.1:6379> lpush list1 12
(integer) 1
127.0.0.1:6379> lpush list1 13
(integer) 2
127.0.0.1:6379> rpop list1
"12"
1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> lpush list2 12
(integer) 1
127.0.0.1:6379> lpush list2 13
(integer) 2
127.0.0.1:6379> lpush list2 14
(integer) 3
127.0.0.1:6379> lpush list2 13
(integer) 4
127.0.0.1:6379> llen list2
(integer) 4

set

无序,不重复

结构:

​ key:

​ value(12)

​ value(13)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
127.0.0.1:6379> sadd set1 12
(integer) 1
127.0.0.1:6379> scard set1
(integer) 1
127.0.0.1:6379> sadd set1 13
(integer) 1
127.0.0.1:6379> scard set1
(integer) 2
127.0.0.1:6379> sadd set 13
(integer) 0
127.0.0.1:6379> scard set1
(integer) 2
127.0.0.1:6379> sismember set1 13
(integer) 1
127.0.0.1:6379> srem set1 13
(integer) 1
127.0.0.1:6379> sismember set1 13
(integer) 0

hash

哈希类型也叫散列类型

key–>key1 value(string/int/float)

​ key2 value(string/int/float)

​ key3 value(string/int/float)

​ key4 value(string/int/float)

添加键值对、删除键值对、

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
127.0.0.1:6379> hset hash1 key1 12
(integer) 1
127.0.0.1:6379> hget hash1 key1
"12"
127.0.0.1:6379> hset hash1 key2 13
(integer) 1
127.0.0.1:6379> hset hash1 key3 13
(integer) 1
127.0.0.1:6379> hlen hash1
(integer) 3
127.0.0.1:6379> hset hash1 key3 14
(integer) 0
127.0.0.1:6379> hget hash1 key3
"14"
127.0.0.1:6379> hmget hash1 key1 key2 key3
1) "12"
2) "13"
3) "14"

sorted set

key–>score(10.1) value(string/int/float) rank:1

​ score(9.1) value(string/int/float) rank:0

​ score(11.1) value(string/int/float) rank:2

value必须唯一

score相同时,按字典顺序排列先后

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
127.0.0.1:6379> zadd zset1 10.1 val1
(integer) 1
127.0.0.1:6379> zadd zset1 11.1 val2
(integer) 1
127.0.0.1:6379> zadd zset1 9.2 val3
(integer) 1
127.0.0.1:6379> zcard zset1
(integer) 3
127.0.0.1:6379> zrange zset1 0 2
1) "val3"
2) "val1"
3) "val2"
127.0.0.1:6379> zrange zset1 0 2 withscores
1) "val3"
2) "9.1999999999999993"
3) "val1"
4) "10.1"
5) "val2"
6) "11.1"
127.0.0.1:6379> zrank zset1 val2
(integer) 2
127.0.0.1:6379> zadd zset1 12.2 val3
(integer) 0
127.0.0.1:6379> zrange zset1 0 2 withscores
1) "val1"
2) "10.1"
3) "val2"
4) "11.1"
5) "val3"
6) "12.199999999999999"
127.0.0.1:6379> zadd zset1 12.2 val2
(integer) 0

127.0.0.1:6379> zrange zset1 0 2 withscores
1) "val1"
2) "10.1"
3) "val2"
4) "12.199999999999999"
5) "val3"
6) "12.199999999999999"

各个数据类型应用场景

类型 简介 特性 场景
String(字符串) 二进制安全 可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M
Hash(字典) 键值对集合,即编程语言中的Map类型 适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去) 存储、读取、修改用户属性
List(列表) 链表(双向链表) 增删快,提供了操作某一段元素的API 1,最新消息排行等功能(比如朋友圈的时间线) 2,消息队列
Set(集合) 哈希表实现,元素不重复 1、添加、删除,查找的复杂度都是O(1) 2、为集合提供了求交集、并集、差集等操作 1、共同好友 2、利用唯一性,统计访问网站的所有独立ip 3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐
Sorted Set(有序集合) 将Set中的元素增加一个权重参数score,元素按score有序排列 数据插入集合时,已经进行天然排序 1、排行榜 2、带权重的消息队列